package cn.itcast.oriented.Class

/**
  * @Package cn.itcast.oriented
  * @author KTL
  * @date 2021/5/22 0022 10:01
  * @version V1.0
  * @Copyright © 2015-04-29  One for each, and two for each
  */
class ClassDemo02 {
}
/*
class Person{
  val id =100   //val修饰的变量，不可以被更改，相当只有getter方法
  var name ="jack"  //var修饰变量，能重新被赋值，相当有get/set方法
  private val age =18//private修饰表示私有，只能当前类或者伴生对象可以访问
  private[this] val pet="mouse"//对象私有，只有当前类可以用

@BeanProperty//会生成get/set方法和java代码兼容（原本scala是不推荐get/set的）
  var money:Int=_  //_表示占位符，后续需要复制

  def m1()={
    println("m1执行了")
  }
  def m2(): Unit ={
    println("m2执行了")
  }
}
*/

/*
构造器参数可以带或者不带val/var
如果带val/var的参数会被作为字段(一般带上)
如果不带val/var的参数，不会被作为字段，仅仅能被主构造器中的语句使用，或者被方法所使用，如果被方法使用了，
那么它将提升private[this]
 */
class Person3(val id:Int,var name:String){
  println("主构造器执行了")

  //定义一个辅助构造器，里面得调用主构造器或其他辅助构造器（必须放在第一行）
  def this(){
    this(100,"jack")
    println("空参数辅助构造器执行了")
  }
  def this(name:String){
    this(100,name)
    println("带参数辅助构造器执行了")
  }
}
//同一个文件名中同名的object叫做类的伴生对象
object Person3{
  def main(args: Array[String]): Unit = {
    //val person = new Person3()
    val person2 = new Person3("jack")
  }
}